package com.qingcheng.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.qingcheng.pojo.goods.Goods;
import com.qingcheng.pojo.goods.Sku;
import com.qingcheng.pojo.goods.Spu;
import com.qingcheng.service.goods.CategoryService;
import com.qingcheng.service.goods.SpuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/item")
public class ItemController {


    @Reference
    private SpuService spuService;

    @Autowired
    private TemplateEngine templateEngine;

    @Value("${pagePath}")
    private String pagePath;

    @Reference
    private CategoryService categoryService;


    @GetMapping("/item")
    public String itemPage(String spuId){
        return "item";
    }

    @GetMapping("/createPage")
    public void CreatePage(String spuId){
        //商品基本信息
        Goods goods = spuService.findGoodsById(spuId);
        //spu
        Spu spu = goods.getSpu();
        //sku
        List<Sku> skuList = goods.getSkuList();
        //商品分类信息
        List<String> categoryList=new ArrayList<>();
        categoryList.add(categoryService.findById(spu.getCategory1Id()).getName());
        categoryList.add(categoryService.findById(spu.getCategory2Id()).getName());
        categoryList.add(categoryService.findById(spu.getCategory3Id()).getName());

        //url
        Map urlMap=new HashMap();
        for (Sku sku : skuList){
            String specJson = JSON.toJSONString(JSON.parseObject(sku.getSpec()), SerializerFeature.MapSortField);
            urlMap.put(specJson,sku.getId()+".html");
        }

        //循环生成sku页面
        for (Sku sku : skuList) {
            //thymeleaf静态页面封装数据
            Context context = new Context();
            Map<String,Object> dataMap = new HashMap<>();
            dataMap.put("spu",spu);
            dataMap.put("sku",sku);
            dataMap.put("categoryList",categoryList);
            dataMap.put("spuImages",spu.getImages().split(","));
            dataMap.put("skuImages",sku.getImages().split(","));

            Map paraItems = JSON.parseObject(spu.getParaItems());
            dataMap.put("paraItems",paraItems);

            Map specItems = JSON.parseObject(sku.getSpec());
            dataMap.put("specItems",specItems);


            Map<String,List> specMap =  (Map)JSON.parseObject(spu.getSpecItems());//规格和规格选项
            for(String key :specMap.keySet()  ){  //循环规格
                List<String> list = specMap.get(key);//["天空之境","珠光贝母"]
                List<Map> mapList=new ArrayList<>();//新的集合  //[{ 'option':'天空之境',checked:true },{ 'option':'珠光贝母',checked:false }]
                //循环规格选项
                for(String value:list){
                    Map map=new HashMap();
                    map.put("option",value);//规格选项
                    if(specItems.get(key).equals(value) ){  // 如果和当前sku的规格相同，就是选中
                        map.put("checked",true);//是否选中
                    }else{
                        map.put("checked",false);//是否选中
                    }
                    Map<String,String>  spec= (Map)JSON.parseObject(sku.getSpec()) ;//当前的Sku
                    spec.put(key,value);
                    String specJson = JSON.toJSONString(spec , SerializerFeature.MapSortField);
                    map.put("url",urlMap.get(specJson));
                    mapList.add(map);
                }
                specMap.put(key,mapList);//用新的集合替换原有的集合
            }


//            Map<String,List> specMap =  (Map)JSON.parseObject(spu.getSpecItems());//规格和规格选项
//            for (String key : specMap.keySet()) {
//                List<Map> mapList=new ArrayList<>();
//                List<String> list = specMap.get(key);
//                for (String value : list) {
//                    Map map=new HashMap();
//                    map.put("option",value);
//                    if (specItems.get(key).equals(value)){
//                        map.put("checked",true);
//                    }else {
//                        map.put("checked",false);
//                    }
//                    Map<String,String>  spec= (Map)JSON.parseObject(sku.getSpec()) ;//当前的Sku
//                    spec.put(key,value);
//                    //url
//                    String specSer = JSON.toJSONString(spec, SerializerFeature.MapSortField);
//                    map.put("url",urlMap.get(specSer));
//                    mapList.add(map);
//                }
//                specMap.put(key,mapList);
//            }
            dataMap.put("specMap",specMap);


            context.setVariables(dataMap);
            //生成页面
            PrintWriter writer = null;
            try {
                //（2）准备文件
                File dir =new File(pagePath);
                if( !dir.exists()){
                    dir.mkdirs();
                }
                File dest= new File(dir, sku.getId()+".html" );
                writer = new PrintWriter(dest, "UTF-8");
                templateEngine.process("item",context,writer);
                System.out.println("生成页面："+sku.getId()+".html");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

        }
    }
}
